package co.edu.javeriana.monopoly.server.eventos;

import co.edu.javeriana.monopoly.server.modelo.Casilla;
import co.edu.javeriana.monopoly.server.modelo.Evento;
import co.edu.javeriana.monopoly.server.modelo.Jugada;
import co.edu.javeriana.monopoly.server.modelo.Jugador;
import co.edu.javeriana.monopoly.server.modelo.Monopoly;
import co.edu.javeriana.monopoly.server.modelo.MonopolyException;

import co.edu.javeriana.monopoly.server.modelo.Propiedad;

import java.rmi.RemoteException;

public class CobrarRenta extends Evento {
    public CobrarRenta(Object[] _objects) {
        super(_objects);
    }

    public void ejecutar() throws MonopolyException {
        Monopoly m;
        try {
            m = Monopoly.getMonopoly();
        } catch (RemoteException e) {
            throw new MonopolyException("Error al trae el juego",e);
        }
        Jugador jugador = (Jugador) m.getTablero().getJugadores().get(getJugada().getJugador().getId());
        Evento e = null;
        Jugada nextjugada = new Jugada();
        Casilla casillaactual = (Casilla)m.getTablero().getCasillas().get(new Integer(jugador.getCasilla().getPosicion()));
        
        if (jugador.getSaldo() < ((Propiedad)casillaactual).valorTotalAlquiler() ){
            e = new BancaRota(null);    
        }
        else{
            jugador.setSaldo(jugador.getSaldo() - ((Propiedad)casillaactual).valorTotalAlquiler());
            if (jugador.getDado().sonPares()){
                e = new ResultadoPares(null);
            }else{
                e = new FinTurno(null);
            }
        }
        nextjugada.setJugador(jugador);
        nextjugada.setMonopoly(m);
        nextjugada.setRegla(e);
                
                
        try {
            m.enviarNotificacion(nextjugada);
        } catch (RemoteException f) {
             throw new MonopolyException("Error al notificar el proximo evento",f);
        }

        
    }
}
